<?php
App::uses('AppController', 'Controller');
/**
 * Demandes Controller
 *
 * @property Demande $Demande
 * @property PaginatorComponent $Paginator
 * @property SessionComponent $Session
 */
class DemandesController extends AppController {

/**
 * Components
 *
 * @var array
 */
	public $components = array(
		'Paginator', 
		'Session',
		'Auth' => array(
			'loginAction' => array(
				'controller' => 'utilisateurs',
				'action' => 'login'
				)
			)
		);

/**
 * index method
 *
 * @return void
 */
	public function index() {
		$this->index_livres_pretes();
	}
	
/**
 * index_demandes_prets method
 *
 * @return void
 */
	public function index_demandes_prets() {
		$this->Demande->recursive = 3;
		$conditions = array(
			'Possesseur.id'=>$this->Auth->user('id'),
			'Demande.statut_demande_id'=> array(
					$this->Demande->StatutDemande->getStatutEnAttente(),
					$this->Demande->StatutDemande->getStatutAccepte(),
					$this->Demande->StatutDemande->getStatutRefuse()
				)	
			);
		$this->Paginator->settings = array(
			'conditions' => $conditions 
		);			
		$this->set('demandes', $this->Paginator->paginate());
	}	
	
/**
 * index_demandes_emprunts method
 *
 * @return void
 */
	public function index_demandes_emprunts() {
		$this->Demande->recursive = 3;
		$conditions = array(
			'Demandeur.id'=>$this->Auth->user('id'),
			'Demande.statut_demande_id'=> array($this->Demande->StatutDemande->getStatutEnAttente(),
					$this->Demande->StatutDemande->getStatutAccepte(),
					$this->Demande->StatutDemande->getStatutRefuse()
				)
			);
		$this->Paginator->settings = array(
			'conditions' => $conditions 
		);			
		$this->set('demandes', $this->Paginator->paginate());
	}
	
/**
 * index_livres_pretes method
 *
 * @return void
 */
	public function index_livres_pretes() {
		$this->Demande->recursive = 3;
		$conditions = array(
			'Possesseur.id'=>$this->Auth->user('id'),
			'Demande.statut_demande_id' => array(
					$this->Demande->StatutDemande->getStatutEnCours(),
					$this->Demande->StatutDemande->getStatutTermine()
				)
			);
		$this->Paginator->settings = array(
			'conditions' => $conditions 
		);			
		$this->set('demandes', $this->Paginator->paginate());
		$this->view ='index_livres_pretes';
	}	
/**
 * index_livres_empruntes method
 *
 * @return void
 */
	public function index_livres_empruntes() {
		$this->Demande->recursive = 3;
		$conditions = array(
			'Demandeur.id'=>$this->Auth->user('id'),
			'Demande.statut_demande_id' => array(
					$this->Demande->StatutDemande->getStatutEnCours(),
					$this->Demande->StatutDemande->getStatutTermine()
				)
			);
		$this->Paginator->settings = array(
			'conditions' => $conditions 
			
		);			
		$this->set('demandes', $this->Paginator->paginate());
	}

/**
 * view method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function view($id = null) {
		if (!$this->Demande->exists($id)) {
			throw new NotFoundException(__('Invalid demande'));
		}
		$options = array('conditions' => array('Demande.' . $this->Demande->primaryKey => $id));
		$this->set('demande', $this->Demande->find('first', $options));
	}

/**
 * demander_emprunt method
 *
 * @return void
 */
	public function demander_emprunt($exemplaire_id) {
		
		$this->Demande->Exemplaire->recursive = 2;		
		$exemplaire = $this->Demande->Exemplaire->find('first',array('conditions'=>array('Exemplaire.id'=>$exemplaire_id)));
		if (!$exemplaire) {
			throw new NotFoundException(__('Invalid demande'));
		}		
		
		if ($this->request->is('post')) {
			if($this->Demande->create($exemplaire['Utilisateur']['id']==$this->Auth->user('id'))){
				$this->Session->setFlash(__('Vous ne pouvez pas vous emprunter de livre à vous-même.'));
			} else {
				$this->request->data['statut_demande_id'] = $this->Demande->StatutDemande->getStatutEnAttente();
				$this->request->data['possesseur_id'] = $exemplaire['Utilisateur']['id'];
				$this->request->data['demandeur_id'] = $this->Auth->user('id');
				$this->request->data['exemplaire_id'] = $exemplaire['Exemplaire']['id'];
				$this->request->data['date_demande'] = date('Y-m-d H:i:s');
				if ($this->Demande->save($this->request->data)) {
					$this->Session->setFlash(__('La demande a été enregistrée.'));
					return $this->redirect(array('action' => 'index'));
				} else {
					$this->Session->setFlash(__('La demande n\'a pu être enregistrée. Veuillez réessayer.'));
				}
			}
		}

		$this->set(compact('possesseur', 'exemplaire'));
	}
	
/**
 * enregistrer_retour method
 *
 * @return void
 */
	public function enregistrer_retour($demande_id) {
		
		$demande = $this->Demande->find('first',array(
			'conditions'=>array(
				'Possesseur.id'=>$this->Auth->user('id'),
				'Demande.id'=>$demande_id
				)
			)
		);
		if (!$demande) {
			throw new NotFoundException(__('Demande inconnue'));
		}
		$this->Demande->Exemplaire->recursive = 2;		
		$exemplaire = $this->Demande->Exemplaire->find('first',array('conditions'=>array('Exemplaire.id'=>$demande['Demande']['exemplaire_id'])));
		
		if ($this->request->is('post')) {
			$this->Demande->id = $demande['Demande']['id'];
			$this->request->data['statut_demande_id'] = $this->Demande->StatutDemande->getStatutTermine();
			$this->request->data['date_retour_effective'] =  date('Y-m-d H:i:s');
			if ($this->Demande->save($this->request->data)) {
				$this->Session->setFlash(__('Le retour du livre a été enregistré.'));
				return $this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('Erreur lors de l\'enregistrement.'));
			}
		}

		$this->set(compact('exemplaire','demande'));
	}
	
/**
 * accepter_emprunt method
 *
 * @return void
 */
	public function accepter_emprunt($demande_id) {
		
		$demande = $this->Demande->find('first',array('conditions'=>array('Possesseur.id'=>$this->Auth->user('id'),'Demande.id'=>$demande_id)));
		$this->Demande->Exemplaire->recursive = 2;		
		$exemplaire = $this->Demande->Exemplaire->find('first',array('conditions'=>array('Exemplaire.id'=>$demande['Demande']['exemplaire_id'])));
		if (!$exemplaire) {
			throw new NotFoundException(__('Invalid demande'));
		}		
		
		if ($this->request->is('post')) {
			$this->Demande->id = $demande['Demande']['id'];
			$this->request->data['statut_demande_id'] = $this->Demande->StatutDemande->getStatutAccepte();
			$this->request->data['date_reponse'] =  date('Y-m-d H:i:s');
			if ($this->Demande->save($this->request->data)) {
				$this->Session->setFlash(__('La demande a été enregistrée.'));
				return $this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('The demande could not be saved. Please, try again.'));
			}
		}
		
		$this->set(compact('exemplaire'));
	}
/**
 * refuser_emprunt method
 *
 * @return void
 */
	public function refuser_emprunt($demande_id) {
		
		$demande = $this->Demande->find('first',array('conditions'=>array('Possesseur.id'=>$this->Auth->user('id'),'Demande.id'=>$demande_id)));
		$this->Demande->Exemplaire->recursive = 2;		
		$exemplaire = $this->Demande->Exemplaire->find('first',array('conditions'=>array('Exemplaire.id'=>$demande['Demande']['exemplaire_id'])));
		if (!$exemplaire) {
			throw new NotFoundException(__('Invalid demande'));
		}		
		
		if ($this->request->is('post')) {
			$this->Demande->id = $demande['Demande']['id'];
			$this->request->data['statut_demande_id'] = $this->Demande->StatutDemande->getStatutRefuse();
			$this->request->data['date_reponse'] =  date('Y-m-d H:i:s');
			if ($this->Demande->save($this->request->data)) {
				$this->Session->setFlash(__('La demande a été enregistrée.'));
				return $this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('The demande could not be saved. Please, try again.'));
			}
		}

		$this->set(compact('exemplaire'));
	}
/**
 * enregistrer_pret method
 *
 * @return void
 */
	public function enregistrer_pret($demande_id) {
		
		$demande = $this->Demande->find('first',array('conditions'=>array('Possesseur.id'=>$this->Auth->user('id'),'Demande.id'=>$demande_id)));
		$this->Demande->Exemplaire->recursive = 2;		
		$exemplaire = $this->Demande->Exemplaire->find('first',array('conditions'=>array('Exemplaire.id'=>$demande['Demande']['exemplaire_id'])));
		if (!$exemplaire) {
			throw new NotFoundException(__('Invalid demande'));
		}		
		
		if ($this->request->is('post')) {
			$this->Demande->id = $demande['Demande']['id'];
			$this->request->data['statut_demande_id'] = $this->Demande->StatutDemande->getStatutEnCours();
			$this->request->data['date_debut_pret'] =  date('Y-m-d H:i:s');
			$this->request->data['date_fin_pret'] =  date('Y-m-d H:i:s', time()+3600*24*30);
			if ($this->Demande->save($this->request->data)) {
				$this->Session->setFlash(__('La demande a été enregistrée.'));
				return $this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('The demande could not be saved. Please, try again.'));
			}
		}

		$this->set(compact('exemplaire'));
		$this->view='index_demandes_prets';
	}

}
